/*
 * @Author: mikey.zhaopeng 
 * @Date: 2020-04-03 12:07:41 
 * @Last Modified by: mikey.zhaopeng
 * @Last Modified time: 2020-04-06 09:55:14
 */
var path = require('path')
daoModule = require('./DAO')
databaseModule = require(path.join(process.cwd(), "modules/database"));


module.exports.create = (obj, cb) => {
	daoModule.create("ArticleModel", obj, cb);
}


/**
 * 获取文章列表
 * 
 * @param  {[type]}   conditions 查询条件
 * @param  {Function} cb         回调函数
 */
module.exports.list = function (conditions, cb) {
	daoModule.list("ArticleModel", conditions, function (err, models) {
		if (err) return cb(err, null);
		cb(null, models);
	});
}

/**
 * 通过查询条件获取文章对象
 * 
 * @param  {[type]}   conditions 条件
 * @param  {Function} cb         回调函数
 */
module.exports.findOne = function (conditions, cb) {
	daoModule.findOne("ArticleModel", conditions, cb);
}

/**
 * 通过关键词查询用户
 * 
 * @param  {[type]}   key    关键词
 * @param  {[type]}   offset 
 * @param  {[type]}   limit  
 * @param  {Function} cb     回调函数
 */
module.exports.findByKey = function (key, cb) {
	db = databaseModule.getDatabase();
	sql = "SELECT * FROM article";

	if (key) {
		sql += " WHERE title LIKE ? ";
		database.driver.execQuery(
			sql
			, ["%" + key + "%"], function (err, managers) {
				if (err) return cb("查询执行出错");
				cb(null, managers);
			});
	} else {
		sql;
		database.driver.execQuery(sql, function (err, managers) {
			if (err) return cb("查询执行出错");
			cb(null, managers);
		});
	}
}

/**
 * 判断是否存在文章
 * 
 * @param  {[type]}   title    文章标题
 * @param  {Function} cb       回调函数
 * 
 */
module.exports.exists = function (title, cb) {
	var db = databaseModule.getDatabase();
	var Model = db.models.ArticleModel;
	Model.exists({ "title": title }, function (err, isExists) {
		if (err) return cb("查询失败");
		cb(null, isExists);
	});
}

/**
 * 模糊查询用户数量
 * 
 * @param  {[type]}   key 关键词
 * @param  {Function} cb  回调函数
 */
module.exports.countByKey = function (key, cb) {
	db = databaseModule.getDatabase();
	sql = "SELECT count(*) as count FROM article";
	if (key) {
		sql += " WHERE title LIKE ?";
		database.driver.execQuery(
			sql
			, ["%" + key + "%"], function (err, result) {
				if (err) return cb("查询执行出错");
				cb(null, result[0]["count"]);
			});
	} else {
		database.driver.execQuery(sql, function (err, result) {
			if (err) return cb("查询执行出错");
			cb(null, result[0]["count"]);
		});
	}

}

/**
 * 通过ID获取文章对象数据
 * 
 * @param  {[type]}   id 文章主键ID
 * @param  {Function} cb 回调函数
 */
module.exports.show = function (id, cb) {
	daoModule.show("ArticleModel", id, cb);
}

/**
 * 更新文章信息
 * 
 * @param  {[type]}   obj 文章对象
 * @param  {Function} cb  回调函数
 */
module.exports.update = function (obj, cb) {
	daoModule.update("ArticleModel", obj.art_id, obj, cb);
}

/**
 * 删除文章对象数据
 * 
 * @param  {[type]}   id 主键ID
 * @param  {Function} cb 回调函数
 */
module.exports.destroy = function (id, cb) {
	daoModule.destroy("ArticleModel", id, function (err) {
		if (err) return cb(err);
		return cb(null);
	});
}

/**
 * 保存文章信息
 * 
 * @param  {[type]}   obj 文章对象
 * @param  {Function} cb  回调函数
 */
module.exports.save = function (obj, cb) {
	daoModule.show(obj.art_id, function (err, oldObj) {
		if (err) {
			daoModule.create("ArticleModel", obj, cb);
		} else {
			daoModule.update("ArticleModel", obj.art_id, obj, cb);
		}
	})
}

/**
 * 获取文章数量
 * 
 * @param  {Function} cb 回调函数
 */
module.exports.count = function (cb) {
	daoModule("ArticleModel", cb);
}